package cn.ygh.bbo.system.bean;
import cn.ygh.bbo.common.annotation.Excel;
import cn.ygh.bbo.framerwork.core.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;

import java.util.*;
import lombok.Data;
import org.apache.commons.lang3.builder.*;
/**
* 描述：部门
* @author ygh
*/
@TableName("dept")
@Data
public class Dept extends BaseEntity {
    /*数据库字段——start*/
    /**
    * 序号
    */
    @Excel("序号")
    @TableId(type = IdType.AUTO)
    @TableField(value = "id")
    private Integer id;

    /**
    * 部门名
    */
    @Excel("部门名")
    @TableField(value = "name")
    private String name;

    /**
    * 父权限序号
    */
    @Excel("父权限序号")
    @TableField(value = "parent_id")
    private Integer parentId;

    /**
    * 等级
    */
    @Excel("等级")
    @TableField(value = "level")
    private Integer level;

    /**
    * 创建时间
    */
    @Excel("创建时间")
    @TableField(value = "gmt_create")
    private Date gmtCreate;


    /*数据库字段——end*/

    /**
    * 默认值设置
    * @return
    */
    public Dept def(){
        if (level==null){
            level=0;
        }
        if (parentId==null){
            parentId=0;
        }
        return this;
    }

     /*构造函数——start*/
    public Dept() {
    }

    public Dept(Integer id) {
        this.id=id;
    }

    /**
    *构造函数
    */
    public Dept(String name,Integer parentId,Integer level,Date gmtCreate) {
        this.name=name;
        this.parentId=parentId;
        this.level=level;
        this.gmtCreate=gmtCreate;
    }
    /*构造函数——end*/

    /*非数据库字段——start*/
    /**
    * 创建时间开始
    */
    @TableField(exist = false)
    private Date gmtCreateBeginValue;

    /**
    * 创建时间结束
    */
    @TableField(exist = false)
    private Date gmtCreateEndValue;

    /**
     * 子部门列表
     */
    @TableField(exist = false)
    private List<Dept>children;

    /*非数据库字段——end*/

    /**
	 * Hash，同所有字段相加判断
	 */
	@Override
	public int hashCode() {
		if(getId()==null){
            return new HashCodeBuilder()
            .append(getName())
            .append(getParentId())
            .append(getLevel())
            .append(getGmtCreate())
			.toHashCode();
        }
		return new HashCodeBuilder()
			.append(getId())
			.toHashCode();
	}
    /**
	 * 重写，对象是否相同，用ID来判断
	 */
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Dept)) {
			return false;
		}
		if(this == obj) {
			return true;
		}
        Dept other = (Dept)obj;
		return new EqualsBuilder()
			.append(getId(),other.getId())
			.isEquals();
	}
	/**
	 * 转文本
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this,ToStringStyle.SHORT_PREFIX_STYLE)
			.append(super.toString())
            .append(",Id",getId())
            .append(",Name",getName())
            .append(",ParentId",getParentId())
            .append(",Level",getLevel())
            .append(",GmtCreate",getGmtCreate())
			.toString();

	}

/*
//精简构造 部门
Dept dept = new Dept(
            name //部门名
            ,parentId //父权限序号
            ,level //等级
            ,gmtCreate //创建时间
);
*/
}